// 日志log中间件
package middleware

import (
	"admin-api/pkg/log"
	"github.com/gin-gonic/gin"
	"github.com/sirupsen/logrus"
	"time"
)

// Logger 是一个 Gin 中间件，用于记录 HTTP 请求的详细信息
func Logger() gin.HandlerFunc {
	logger := log.Log()
	return func(c *gin.Context) {
		// 记录请求开始时间
		startTime := time.Now()
		// 继续处理请求
		c.Next()
		// 记录请求结束时间
		endtime := time.Now()
		// 计算请求处理延迟时间（毫秒）
		latenctTime := endtime.Sub(startTime) / time.Millisecond
		// 获取请求方法
		reqMethod := c.Request.Method
		// 获取请求 URI
		reqUri := c.Request.RequestURI
		// 获取请求头
		header := c.Request.Header
		// 获取请求协议
		proto := c.Request.Proto
		// 获取响应状态码
		statusCode := c.Writer.Status()

		// 记录日志，包括请求方法、URI、状态码、延迟时间、协议和请求头
		logger.WithFields(logrus.Fields{
			"method":       reqMethod,
			"uri":          reqUri,
			"status":       statusCode,
			"latency_time": latenctTime,
			"proto":        proto,
			"headers":      header,
		}).Info("HTTP Request")
	}
}
